﻿
namespace CompositePattern;

/// <summary>
/// 机构/个人
/// </summary>
internal class Domain
{
    // 名称，必填属性
    public required string Name { get; set; }
    // 提成百分比
    public double Percent { get; set; }

    // 子机构/个人集合
    private List<Domain> _domains = new List<Domain>();

    /// <summary>
    /// 添加下级机构/个人
    /// </summary>
    /// <param name="domain">下级对象</param>
    public void AddChild(Domain domain)
    {
        _domains.Add(domain);
    }

    /// <summary>
    /// 计算并输出当前对象及其所有下级的提成
    /// </summary>
    /// <param name="total">总金额</param>
    public void Commission(double total)
    {
        // 计算当前对象的提成
        double result = total * Percent / 100;
        Console.WriteLine($"This {Name} 提成 {result}");

        // 使用递归计算各个下级的提成
        foreach (Domain domain in _domains)
        {
            domain?.Commission(result);
        }
    }
}
